package com.admin.dao;

import java.util.ArrayList;

import org.apache.ibatis.annotations.Param;

import com.common.model.College;
import com.common.model.Department;
import com.common.model.ProfBranch;
import com.common.model.Profession;

public interface AdminSchoolDao {
	
	/**
	 * 读取所有的学院
	 * @return 返回所有的学院
	 */
	public ArrayList<College> getAllCollege();
	
	/**
	 * 读取某学院下的所有系
	 * @param college_id 学院id
	 * @return 
	 */
	public ArrayList<Department>getDepsOfCollege(int clgId);
	
	/**
	 * 读取某系下的所有专业
	 * @param depId 系id
	 * @return
	 */
	public ArrayList<Profession>getProsOfDeps(int depId);
	/**
	 * 读取某专业下的所有专业方向
	 * @param proId
	 * @return
	 */
	public ArrayList<ProfBranch>getBranchesOfPro(int proId);
	//***************************方向分页查询
	/**
	 * 查询指定页码所有方向
	 * @param page 页码
	 * @return
	 */
	public ArrayList<ProfBranch>getBranchesByAll(int start);
	/**
	 * 根据学院id查询指定页码所有方向
	 * @param page 页码
	 * @param clgId 学院id
	 * @return
	 */
	public ArrayList<ProfBranch>getBranchesByClgId(@Param("start")int start,@Param("clgId")int clgId);
	/**
	 * 根据系id查询指定页码所有方向
	 * @param page 页码
	 * @param depId 系id
	 * @return
	 */
	public ArrayList<ProfBranch>getBranchesByDepId(@Param("start")int start,@Param("depId")int depId);
	/**
	 * 根据专业id查询指定页码所有方向
	 * @param page 页码
	 * @param proId 专业id
	 * @return
	 */
	public ArrayList<ProfBranch>getBranchesByProId(@Param("start")int start,@Param("proId")int proId);

	/**
	 * 获取所有专业方向的数目
	 * @return
	 */
	public int getBranchesCountByAll();
	/**
	 * 查询指定学院下所有专业方向数目
	 * @param clgId 学院id
	 * @return
	 */
	public int getBranchesCountByClgId(int clgId);
	/**
	 * 查询指定系下所有专业方向数目
	 * @param depId 系id
	 * @return
	 */
	public int getBranchesCountByDepId(int depId);
	/**
	 * 查询指定专业下所有专业方向数目
	 * @param proId 专业id
	 * @return
	 */
	public int getBranchesCountByProId(int proId);
	//****************************************方向查询辅助
	/**
	 * 根据专业方向id查询专业方向
	 * @param pbId 专业方向id
	 * @return
	 */
	public ProfBranch getProBranchByPbId(int pbId);
	/**
	 * 根据专业方向id查询专业方向
	 * @param pbId 专业方向id
	 * @return
	 */
	public ArrayList<ProfBranch> getProBranchByPbName(String pbName);
	/**
	 * 根据专业id查询专业
	 * @param proId 专业id
	 * @return
	 */
	public Profession getProfessionByProId(int proId);
	//*********************************方向修改
	/**
	 * 修改方向信息
	 * @param pb
	 * @return
	 */
	public int updateProBranch(ProfBranch pb);
	/**
	 * 查询某个方向下面的班级数目
	 * @param pbId
	 * @return
	 */
	public int getClassCountOfBranch(int pbId);
	/**
	 * 查询某个方向下与之相关的毕业题目
	 * @param pbId
	 * @return
	 */
	public int getProjectCountOfBranch(int pbId);
	/**
	 * 删除某个专业方向
	 * @param pbId
	 * @return
	 */
	public int deleteProBranch(int pbId);
	/**
	 * 增加一个专业方向
	 * @param pb
	 * @return
	 */
	public int insertProBranch(ProfBranch pb);
	//******************************方向修改辅助
	/**
	 * 根据方向编号查询方向
	 * @param no 专业编号
	 * @return
	 */
	public ProfBranch getBranchByBranchNo(int no);
	
	//*******************************专业分页查询
	/**
	 * 分页查询所有专业
	 * @param start 起始位置
	 * @return
	 */
	public ArrayList<Profession>getProfessionsByAll(int start);
	/**
	 * 查询所有的专业数目
	 * @return
	 */
	public int getProfessionsCountByAll();
	/**
	 * 分页某系下所有专业
	 * @param start 起始位置
	 * @param depId 系id
	 * @return
	 */
	public ArrayList<Profession>getProfessionsByDepId(@Param("start")int start,@Param("dep_id")int depId);
	/**
	 * 获取某系下所有专业数目
	 * @param depId 系id
	 * @return
	 */
	public int getProfessionsCountByDepId(int depId);
	/**
	 * 分页查询某学院下所有专业数目
	 * @param start 起始位置
	 * @param clgId 学院id
	 * @return
	 */
	public ArrayList<Profession>getProfessionsByClgId(@Param("start")int start,@Param("clg_id")int clgId);
	/**
	 * 获取某学院下所有专业数目
	 * @param clgId 学院id
	 * @return
	 */
	public int getProfessionsCountByClgId(int clgId);
	//******************************************专业修改
	/**
	 * 修改一个专业
	 * @param pro
	 * @return
	 */
	public int updateProfession(Profession pro);
	/**
	 * 删除一个专业
	 * @param proId
	 * @return
	 */
	public int deleteProfession(int proId);
	/**
	 * 增加一个专业
	 * @param pro
	 * @return
	 */
	public int insertProfession(Profession pro);
	//******************************************专业修改辅助
	/**
	 * 通过系id查询系
	 * @param depId
	 * @return
	 */
	public Department getDepartmentByDepId(int depId);
	/**
	 * 通过专业no查询专业
	 * @param proNo
	 * @return
	 */
	public Profession getProfessionByProNo(String proNo);
	//*********************************分页查询系
	/**
	 *  查询所有系
	 * @param start
	 * @return
	 */
	public ArrayList<Department>getDepartmentsByAll(int start);
	/**
	 * 获取所有系的个数
	 * @return
	 */
	public int getDepartmentsCountByAll();
	/**
	 * 查询某学院下的所有系
	 * @param clgId
	 * @param start
	 * @return
	 */
	public ArrayList<Department>getDepartmentsByClgId(@Param("clg_id")int clgId,@Param("start")int start);
	/**
	 * 查询某学院下所有系的个数
	 * @param clgId
	 * @return
	 */
	public int getDepartmentsCountByClgId(int clgId);
	//*************************************系修改
	/**
	 * 修改一个系
	 * @param dep
	 * @return
	 */
	public int updateDepartment(Department dep);
	/**
	 * 删除一个系
	 * @param depId
	 * @return
	 */
	public int deleteDepartment(int depId);
	/**
	 * 新建一个系
	 * @param dep
	 * @return
	 */
	public int insertDepartment(Department dep);
	//*********************系修改辅助
	
	/**
	 * 通过系no查询系
	 * @param depId
	 * @return
	 */
	public Department getDepartmentByDepNo(String depNo);	/**
	 * 通过系name查询系
	 * @param depId
	 * @return
	 */
	public Department getDepartmentByDepName(String depName);
	/**
	 * 查询某个系下面的教师数目
	 * @param depId
	 * @return
	 */
	public int getTeacherCountByDepId(int depId);
	//***********学院相关
	/**
	 * 读取指定id的学院
	 * @param clgId
	 * @return
	 */
	public College getCollegeByClgId(int clgId);
	/**
	 * 读取指定no的学院
	 * @param clgNo
	 * @return
	 */
	public College getCollegeByClgNo(String clgNo);
	/**
	 * 修改一个学院 
	 * @param clg
	 * @return
	 */
	public int updateCollege(College clg);
	/**
	 * 删除一个学院
	 * @param clgId
	 * @return
	 */
	public int deleteCollege(int clgId);
	/**
	 * 增加一个学院
	 * @param clg
	 * @return
	 */
	public int insertCollege(College clg);
	/**
	 * 查询某学院下的普通管理员数目
	 * @param clgId
	 * @return
	 */
	public int getAdminCountByClgId(int clgId);
	//****************其他
	/**
	 * 获取最小的学院id
	 * @return
	 */
	public int getMinCollegeId();
	/**
	 * 获取某学院下id最小的系id
	 * @param clgId
	 * @return
	 */
	public int getMinDepIdOfCollege(int clgId);
	/**
	 * 获取某系下的所有专业方向
	 * @param depId
	 * @return
	 */
	public ArrayList<ProfBranch> getAllBranchOfDepartment(int depId);
}
